﻿/*-------------------------------------------------------
BÁO CÁO SCRIPT PHẦN 2: STORED PROCEDURE
*/-------------------------------------------------------

/*----------------------------------------
NHÂN VIÊN
1.Thêm
*/----------------------------------------


CREATE PROCEDURE sp_Them_NhanVien
(
	--@iMaNhanVien int,
	@sHoTen nvarchar (50),
	@sCMND varchar(12),
	@dNgaySinh datetime,
	@iGioiTinh int,
	@sDiaChi nvarchar(50),
	@sDienThoai varchar(16),
	@iMaCV int,
	@iMaRap int
)
AS

--kiểm tra macv đã tồn tại trong bảng chức vụ chưa?
	if EXISTS (SELECT MaCV
				FROM ChucVu
				WHERE MaCV = @iMaCV)
--kiểm tra marap đã tồn tại trong bảng rạp chưa?
	IF EXISTS (SELECT MaRap
					FROM Rap
					WHERE MaRap = @iMaRap)
		--tồn tại rồi
		--tạo tự động mã nhân viên
			DECLARE @i INT
			SET @i = 1
			WHILE (exists (SELECT * FROM NhanVien WHERE NhanVien.MaNhanVien = @i ))
				SET @i = @i + 1
					INSERT INTO NhanVien 
					VALUES (@i,@sHoTen,@sCMND,@dNgaySinh,@iGioiTinh,@sDiaChi,@sDienThoai,@iMaCV,@iMaRap)
			IF(@@error <>0)
				BEGIN
					ROLLBACK TRAN
					RETURN
				END
			
		--chưa tồn tại
		ELSE
			BEGIN
				RAISERROR('Có lỗi xảy ra!',16,1)
			END
GO

/*----------------------------------------
			NHÂN VIÊN
2.Xóa
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_NhanVien
(
		@iMaNV int
		--@sTenPhim nvarchar(50)
)
AS
--kiểm tra mã nhân viên có tồn tại trong bảng nhân viên hay ko?
	IF EXISTS (SELECT MaNhanVien
				FROM NhanVien
				WHERE MaNhanVien = @iMaNV)
		-- tồn tại
		BEGIN
			DELETE FROM NhanVien WHERE NhanVien.MaNhanVien = @iMaNV
		END
		--ko tồn tại
	ELSE
		BEGIN
			RAISERROR('Mã nhân viên không tồn tại!',16,1)
		END	
	
GO

--exec sp_Xoa_NhanVien 7
--go

/*----------------------------------------
			NHÂN VIÊN
3.Cập nhật
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_NhanVien

	@iMaNhanVien int,
	@sHoTen nvarchar(50),
	@sCMND varchar(12),
	@dNgaySinh date,
	@iGioiTinh int,
	@sDiaChi nvarchar(50),
	@sDienThoai varchar(15),
	@iMaCV int,
	@iMaRap int
AS
	IF EXISTS (SELECT MaRap
				FROM Rap
				WHERE MaRap = @iMaRap)
	IF EXISTS (SELECT MaCV
				FROM ChucVu
				WHERE MaCV = @iMaCV)
	
		BEGIN
			UPDATE NhanVien 
			SET HoTen = @sHoTen,
				CMND = @sCMND,
				NgaySinh = @dNgaySinh,
				GioiTinh = @iGioiTinh,
				DiaChi = @sDiaChi,
				DienThoai = @sDienThoai,
				MaCV = @iMaCV,
				MaRap = @iMaRap 
				
			WHERE MaNhanVien = @iMaNhanVien
		END
	ELSE
		BEGIN
			RAISERROR('Cập nhật không thành công!',16,1)
		END
GO 


/*----------------------------------------
CHỨC VỤ
1.Thêm
*/----------------------------------------


CREATE PROCEDURE sp_Them_ChucVu
(
	@sTenCV nvarchar(50)
)
AS
		--tạo tự động mã chức vụ
			DECLARE @i INT
			SET @i = 1
			WHILE (exists (SELECT * FROM ChucVu WHERE ChucVu.MaCV = @i ))
				SET @i = @i + 1
				--thêm vào bảng
					INSERT INTO ChucVu 
					VALUES (@i,@sTenCV)
			IF(@@error <>0)
				BEGIN
					ROLLBACK TRAN
					RETURN
				END			
			ELSE 
				BEGIN
					RAISERROR ('Có lỗi!',16,1)
				END
GO

/*----------------------------------------
CHỨC VỤ
2.Xóa
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_ChucVu
(
		@iMaCV int
)
AS
	--kiểm tra mã chức vụ có tồn tại trong bảng nhân viên hay ko?
	IF EXISTS (SELECT MaCV
				FROM NhanVien
				WHERE NhanVien.MaCV = @iMaCV)
		BEGIN
			DELETE FROM NhanVien WHERE NhanVien.MaCV = @iMaCV
		END
	-- kiểm tra mã chức vụ có tồn tại trong bảng chức vụ hay ko?
	IF EXISTS (SELECT MaCV
				FROM ChucVu
				WHERE MaCV = @iMaCV)
		-- tồn tại
		BEGIN
			DELETE FROM ChucVu WHERE ChucVu.MaCV = @iMaCV
		END
		--ko tồn tại
	ELSE
		BEGIN
			RAISERROR('Có lỗi xảy ra!',16,1)
		END	
	
GO

/*----------------------------------------
CHỨC VỤ
3.Cập nhật
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_ChucVu
	@iMaCV int,
	@sTenCV nvarchar(50)
AS
	UPDATE ChucVu
	
	SET TenChucVu = @sTenCV
	WHERE MaCV = @iMaCV
	
GO 
/*----------------------------------------
			PHIM
1.Thêm
*/----------------------------------------

CREATE PROCEDURE sp_Them_Phim
	 
	 @sTenPhim nvarchar(50),
	 @iNamSX int,
	 @sNuocSX nchar(15),
	 @sHangPhim nchar(15),
	 @sGioiThieuPhim ntext,
	 @sTrailer nvarchar(50),
	 @sPoster nvarchar(50),
	 @iThoiLuongPhim int,
	 @iMaDDPhim int,
	 @sDSDVThamGia text
AS
--kiểm tra maddphim đã tồn tại trong bảng DinhDang chưa
	IF EXISTS (SELECT MaDDPhim
				FROM DinhDang
				WHERE MaDDPhim = @iMaDDPhim)
		--tồn tại rồi
		BEGIN
		--tạo tự động mã chức vụ
			DECLARE @i INT
			SET @i = 1
			WHILE (exists (SELECT * FROM Phim WHERE Phim.MaPhim = @i ))
				SET @i = @i + 1
					INSERT INTO Phim
					VALUES (@i,@sTenPhim,@iNamSX,@sNuocSX,@sHangPhim,@sGioiThieuPhim,@sTrailer,@sPoster,@iThoiLuongPhim,@iMaDDPhim,@sDSDVThamGia)
			IF(@@error <>0)
				BEGIN
					ROLLBACK TRAN
					RETURN
				END		
		END
		--chưa tồn tại
	ELSE
		BEGIN
			RAISERROR('Có lỗi xảy ra!',16,1)
		END
GO


/*----------------------------------------
			PHIM
2.Xóa
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_Phim
(
	@iMaPhim int
)
AS
	--kiểm tra mã phim xóa có tồn tại trong bảng CHITIETLOAIPHIM
	IF EXISTS (SELECT MaPhim
				FROM ChiTietLoaiPhim
				WHERE ChiTietLoaiPhim.MaPhim = @iMaPhim)
			-- có: xóa luôn
		BEGIN
			--RAISERROR('Không thể xóa phim trong bảng chi tiết loại phim!',16,1)
			DELETE FROM ChiTietLoaiPhim WHERE MaPhim = @iMaPhim
		END
		--kiểm tra trong bảng SUẤT CHIẾU
			ELSE IF EXISTS (SELECT MaPhim
						FROM SuatChieu
						WHERE SuatChieu.MaPhim = @iMaPhim)
				BEGIN
					DELETE FROM SuatChieu WHERE SuatChieu.MaPhim = @iMaPhim
				END
		
				--kiểm tra trong bảng CẤM XEM
				ELSE IF EXISTS (SELECT MaPhim
								FROM CamXem
								WHERE CamXem.MaPhim = @iMaPhim)
					BEGIN
						DELETE FROM CamXem WHERE CamXem.MaPhim = @iMaPhim
					END
		--kiểm tra mã phim định xóa có tồn tại trong bảng PHIM
		ELSE IF EXISTS (SELECT MaPhim
				FROM Phim
				WHERE Phim.MaPhim = @iMaPhim)
			-- Tồn tại: xóa luôn
			BEGIN
				DELETE FROM Phim WHERE MaPhim = @iMaPhim
			END
				ELSE
					BEGIN
						RAISERROR('Không thể xóa phim!',16,1)
					END	
					
GO
/*----------------------------------------
			PHIM
3.Cập nhật
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_Phim
	 
	 @iMaPhim int,
	 @sTenPhim nvarchar(50),
	 @iNamSX int,
	 @sNuocSX nchar(15),
	 @sHangPhim nchar(15),
	 @sGioiThieuPhim ntext,
	 @sTrailer nvarchar(50),
	 @sPoster nvarchar(50),
	 @iThoiLuongPhim int,
	 @iMaDDPhim int,
	 @sDSDVThamGia text
	 
AS
	IF EXISTS (SELECT MaDDPhim
				FROM DinhDang
				WHERE MaDDPhim = @iMaDDPhim)
		BEGIN
			
			UPDATE Phim 
			SET TenPhim = @sTenPhim,
				NamSX = @iNamSX,
				NuocSX  = @sNuocSX,
				HangPhim = @sHangPhim,
				GioiThieuPhim = @sGioiThieuPhim,
				Trailer = @sTrailer,
				Poster = @sPoster,
				ThoiLuongPhim = @iThoiLuongPhim,
				MaDDPhim = @iMaDDPhim,
				DanhSachDVThamGia = @sDSDVThamGia
			
			WHERE MaPhim = @iMaPhim
		END
	ELSE
		BEGIN
			RAISERROR('Cập nhật không thành công!',16,1)
		END
GO		


/*----------------------------------------
			LOẠI GHẾ
1.Thêm
*/----------------------------------------

CREATE PROCEDURE sp_Them_LoaiGhe
	 @sTenLoaiGhe nvarchar(50)
AS
	DECLARE @i INT
			SET @i = 1
			WHILE (exists (SELECT * FROM LoaiGhe WHERE LoaiGhe.MaLoaiGhe = @i ))
				SET @i = @i + 1
				BEGIN
					INSERT INTO LoaiGhe
					VALUES (@i,@sTenLoaiGhe)
				END
	IF(@@error <> 0)
		BEGIN
			ROLLBACK TRAN
			RETURN
		END										
GO

/*----------------------------------------
			LOẠI GHẾ
2.Xóa
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_LoaiGhe
(
	@iMaLoaiGhe int
)
AS
--kiểm tra tồn tại trong bảng con
--xóa trong bảng con đi
	IF EXISTS (SELECT MaLoaiGhe
				FROM Ghe
				WHERE Ghe.MaLoaiGhe = @iMaLoaiGhe)		
		BEGIN
			DELETE FROM Ghe WHERE Ghe.MaLoaiGhe = @iMaLoaiGhe
		END		

	ELSE IF EXISTS (SELECT MaLoaiGhe
				FROM LoaiGhe
				WHERE MaLoaiGhe = @iMaLoaiGhe)
		BEGIN
			DELETE FROM LoaiGhe WHERE LoaiGhe.MaLoaiGhe = @iMaLoaiGhe
		END
	ELSE
		BEGIN
			RAISERROR('Không thể xóa được loại ghế!',16,1)
		END	
	
GO

/*----------------------------------------
			LOẠI GHẾ
3.Cập nhật
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_LoaiGhe
	
	@iMaLoaiGhe int,
	@sTenLoaiGhe nvarchar (50)
AS
	IF EXISTS (SELECT MaLoaiGhe
				FROM LoaiGhe
				WHERE MaLoaiGhe = @iMaLoaiGhe)
		BEGIN
			UPDATE LoaiGhe
			SET TenLoaiGhe = @sTenLoaiGhe
			WHERE MaLoaiGhe = @iMaLoaiGhe
		END
	ELSE
		BEGIN
			RAISERROR('Cập nhật không thành công!',16,1)
		END
GO		

/*----------------------------------------
			GHẾ
1.Thêm
*/----------------------------------------

CREATE PROCEDURE sp_Them_Ghe
	 @iMaPhong int ,
	 @iMaLoaiGhe int,
	 @iHangGhe int,
	 @iDayGhe int
AS
--kiểm tra sự tồn tại khóa ngoại
	IF EXISTS (SELECT MaPhong
				FROM PhongChieu
				WHERE MaPhong = @iMaPhong)
	IF EXISTS (SELECT MaLoaiGhe
				FROM LoaiGhe
				WHERE MaLoaiGhe = @iMaLoaiGhe)
	
	DECLARE @i INT
			SET @i = 1
			WHILE (exists (SELECT * FROM Ghe WHERE Ghe.MaGhe = @i ))
				SET @i = @i + 1
			BEGIN
				INSERT INTO Ghe
				VALUES (@i,@iMaPhong,@iMaLoaiGhe,@iHangGhe,@iDayGhe)
			END
	IF(@@error <> 0)
		BEGIN
			ROLLBACK TRAN
			RETURN
		END				
			ELSE
				BEGIN
					RAISERROR('Có lỗi xảy ra!',16,1)
				END
GO

/*----------------------------------------
			GHẾ
2.Xóa
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_Ghe
(
	@iMaGhe int
)
AS
	--kiểm tra relationship
	--xóa trong bảng con
	
	IF EXISTS (SELECT MaGhe
				FROM Ve
				WHERE Ve.MaGhe = @iMaGhe)
		BEGIN
			DELETE FROM Ve WHERE Ve.MaGhe = @iMaGhe
		END
		--kiểm tra trong bảng cha
	IF EXISTS (SELECT MaGhe
				FROM Ghe
				WHERE MaGhe = @iMaGhe)
			
		BEGIN
			DELETE FROM Ghe WHERE Ghe.MaGhe = @iMaGhe
		END
	ELSE
		BEGIN
			RAISERROR('Không thể xóa ghế được!',16,1)
		END	
	
GO

/*----------------------------------------
			GHẾ
3.Cập nhật
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_Ghe
	
	@iMaGhe int,
	@iMaPhong int,
	@iMaLoaiGhe int,
	@iHangGhe int,
	@iDayGhe int
AS
	IF EXISTS (SELECT MaGhe
				FROM Ghe
				WHERE MaGhe = @iMaGhe)
		BEGIN
			UPDATE Ghe
			SET MaPhong = @iMaPhong,
				MaLoaiGhe = @iMaLoaiGhe,
				HangGhe = @iHangGhe,
				DayGhe = @iDayGhe
			
			WHERE MaGhe = @iMaGhe
		END
	ELSE
		BEGIN
			RAISERROR('Cập nhật không thành công!',16,1)
		END
GO		


/*----------------------------------------
			THỂ LOẠI PHIM
1.Thêm
*/----------------------------------------

CREATE PROCEDURE sp_Them_TheLoaiPhim
	@sTenTheLoai nvarchar(50) 
	 
AS
--tạo mã tự động tăng
	DECLARE @i INT
			SET @i = 1
			WHILE (exists (SELECT * FROM TheLoaiPhim WHERE TheLoaiPhim.MaTheLoai = @i ))
				SET @i = @i + 1
		BEGIN
			INSERT INTO TheLoaiPhim
			VALUES (@i,@sTenTheLoai)
		END
	IF(@@error <> 0)
		BEGIN
			ROLLBACK TRAN
			RETURN
		END			
	ELSE
		BEGIN
			RAISERROR ('Có lỗi xảy ra!',16,1)
		END
GO

/*----------------------------------------
			THỂ LOẠI PHIM
2.Xóa
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_TheLoaiPhim
(
	@iMaTheLoai int
)
AS
	--kiểm tra ràng buộc khóa ngoại
	--xóa trong bảng con

	IF EXISTS (SELECT MaTheLoai
				FROM ChiTietLoaiPhim
				WHERE ChiTietLoaiPhim.MaTheLoai = @iMaTheLoai)
		BEGIN
			DELETE FROM ChiTietLoaiPhim  WHERE ChiTietLoaiPhim.MaTheLoai = @iMaTheLoai
		END
	
	IF EXISTS (SELECT MaTheLoai
				FROM TheLoaiPhim
				WHERE TheLoaiPhim.MaTheLoai = @iMaTheLoai)
		BEGIN
			DELETE FROM TheLoaiPhim  WHERE TheLoaiPhim.MaTheLoai = @iMaTheLoai
		END
	ELSE
		BEGIN
			RAISERROR('Không thể xóa thể loại phim!',16,1)
		END	
	
GO

/*----------------------------------------
				THỂ LOẠI PHIM
3.Cập nhật
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_TheLoaiPhim
	@iMaTheLoai int,
	@sTenTheLoai nvarchar(50)
	
AS
	IF EXISTS (SELECT MaTheLoai
				FROM TheLoaiPhim
				WHERE MaTheLoai = @iMaTheLoai)
		BEGIN
			UPDATE TheLoaiPhim
			SET 
				TenTheLoai = @sTenTheLoai
			
			WHERE MaTheLoai = @iMaTheLoai
		END
	ELSE
		BEGIN
			RAISERROR('Cập nhật không thành công!',16,1)
		END
GO		

		
/*----------------------------------------
			VÉ
1.Chức năng đặt vé - mua
*/----------------------------------------

CREATE PROCEDURE sp_Dat_Ve
(
	 @iMaLoaiVe int,
	 @iMaGhe int,
	 @iMaSuatChieu int,
	 @iMaTV int,
	 @iTrangThai int,	
	 @iMaDoiTuong int
)
AS
	DECLARE @mThanhTien money
	DECLARE @tSuatChieu time(7)
	select @tSuatChieu = (select GioBD from SuatChieu where MaSuatChieu = @iMaSuatChieu)
	IF EXISTS (SELECT MaLoaiVe
				FROM LoaiVe
				WHERE MaLoaiVe = @iMaLoaiVe)
	IF EXISTS (SELECT MaGhe
				FROM Ghe
				WHERE MaGhe = @iMaGhe)
	IF EXISTS (SELECT MaSuatChieu
				FROM SuatChieu
				WHERE MaSuatChieu = @iMaSuatChieu)
	--IF EXISTS (SELECT MaTV
	--			FROM ThanhVien
	--			WHERE MaTV = @iMaTV)
	IF EXISTS (SELECT MaDoiTuong
				FROM DoiTuong
				WHERE MaDoiTuong = @iMaDoiTuong)
	BEGIN
	IF ((SELECT TenDinhDang from SuatChieu s,Phim p,DinhDang d where s.MaPhim = p.MaPhim and p.MaDDPhim = d.MaDDPhim and MaSuatChieu = @iMaSuatChieu)= '2D')
		BEGIN
			select @mThanhTien = (Select GiaTien2D from LoaiVe where MaLoaiVe = @iMaLoaiVe)
		END
	ELSE 
		BEGIN
			select @mThanhTien = (Select GiaTien3D from LoaiVe where MaLoaiVe = @iMaLoaiVe)
		END
	IF @tSuatChieu >= '19:00:00.0000000'
		BEGIN
			select @mThanhTien = @mThanhTien * 1.2
		END
	IF (datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 2
	 or	datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 3 
	 OR datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 4 
	 OR datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 5)
		BEGIN
			IF (@tSuatChieu<='17:00:00.0000000')
				BEGIN
					IF(@iMaDoiTuong = 2)
						BEGIN
							SELECT @mThanhTien = @mThanhTien -(@mThanhTien * (select HeSoGiamGia from DoiTuong where MaDoiTuong = @iMaDoiTuong))
						END
				END
		END	
	IF(datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 4
	 or	datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 5 )
		BEGIN
			IF(@iMaTV != null)
				SELECT @mThanhTien = @mThanhTien -(@mThanhTien * (select HeSoGiamGia from DoiTuong where MaDoiTuong = @iMaDoiTuong))
		END			
		BEGIN
			INSERT INTO Ve
			VALUES (@iMaLoaiVe,@iMaGhe,@iMaSuatChieu,@iMaTV,@iTrangThai,@mThanhTien,@iMaDoiTuong)
		END
		END
	ELSE
		BEGIN
			RAISERROR('Lỗi khi nhập dữ liệu!',16,1)
		END

	--@iMaLoaiVe int,
	--@iMaGhe int,
	--@iMaSuatChieu int,
	--@iMaTV int,
	--@iTrangThai int,	
	--@iMaDoiTuong int
	--exam:exec sp_Dat_Ve 1,122,2,null,1,2
GO

/*----------------------------------------
			VÉ
2. Chức năng hủy vé
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_Ve
(
		@iMaGhe int,
		@iMaSuatChieu int
)
AS
	IF EXISTS (SELECT *
				FROM Ve
				WHERE MaSuatChieu= @iMaSuatChieu and MaGhe = @iMaGhe)
		BEGIN
			DELETE FROM Ve WHERE MaSuatChieu = @iMaSuatChieu and MaGhe = @iMaGhe
		END
	ELSE
		BEGIN
			RAISERROR('Vé không tồn tại',16,1)
		END	
	
GO

/*----------------------------------------
			VÉ
3.Cập nhật vé
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_Ve
(
	 @iMaLoaiVe int,
	 @iMaGhe int,
	 @iMaSuatChieu int,
	 @iMaTV int,
	 @iTrangThai int,	
	 @iMaDoiTuong int
)
AS
	DECLARE @mThanhTien money
	DECLARE @tSuatChieu time(7)
	select @tSuatChieu = (select GioBD from SuatChieu where MaSuatChieu = @iMaSuatChieu)
	IF EXISTS (SELECT MaLoaiVe
				FROM LoaiVe
				WHERE MaLoaiVe = @iMaLoaiVe)
	IF EXISTS (SELECT MaGhe
				FROM Ghe
				WHERE MaGhe = @iMaGhe)
	IF EXISTS (SELECT MaSuatChieu
				FROM SuatChieu
				WHERE MaSuatChieu = @iMaSuatChieu)
	--IF EXISTS (SELECT MaTV
	--			FROM ThanhVien
	--			WHERE MaTV = @iMaTV)
	IF EXISTS (SELECT MaDoiTuong
				FROM DoiTuong
				WHERE MaDoiTuong = @iMaDoiTuong)
	BEGIN
	IF ((SELECT TenDinhDang from SuatChieu s,Phim p,DinhDang d where s.MaPhim = p.MaPhim and p.MaDDPhim = d.MaDDPhim and MaSuatChieu = @iMaSuatChieu)= '2D')
		BEGIN
			select @mThanhTien = (Select GiaTien2D from LoaiVe where MaLoaiVe = @iMaLoaiVe)
		END
	ELSE 
		BEGIN
			select @mThanhTien = (Select GiaTien3D from LoaiVe where MaLoaiVe = @iMaLoaiVe)
		END
	IF @tSuatChieu >= '19:00:00.0000000'
		BEGIN
			select @mThanhTien = @mThanhTien * 1.2
		END
	IF (datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 2
	 or	datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 3 
	 OR datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 4 
	 OR datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 5)
		BEGIN
			IF (@tSuatChieu<='17:00:00.0000000')
				BEGIN
					IF(@iMaDoiTuong = 2)
						BEGIN
							SELECT @mThanhTien = @mThanhTien -(@mThanhTien * (select HeSoGiamGia from DoiTuong where MaDoiTuong = @iMaDoiTuong))
						END
				END
		END	
	IF(datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 4
	 or	datepart(dw,(SELECT NgayChieu from SuatChieu where MaSuatChieu = @iMaSuatChieu)) = 5 )
		BEGIN
			IF(@iMaTV != null)
				SELECT @mThanhTien = @mThanhTien -(@mThanhTien * (select HeSoGiamGia from DoiTuong where MaDoiTuong = @iMaDoiTuong))
		END			
		BEGIN
			UPDATE Ve
			SET MaLoaiVe = @iMaLoaiVe,
				MaTV = @iMaTV,
				TrangThai = @iTrangThai,
				ThanhTien = @mThanhTien,
				MaDoiTuong = @iMaDoiTuong
			WHERE MaSuatChieu = @iMaSuatChieu and MaGhe = @iMaGhe
		END
		END
	ELSE
		BEGIN
			RAISERROR('Lỗi khi nhập dữ liệu!',16,1)
		END
		--exam:	 exec sp_CapNhat_Ve 1,122,2,null,1,2
GO 


/*----------------------------------------
			CA CHIẾU
1.Thêm
*/----------------------------------------

CREATE PROCEDURE sp_Them_CaChieu
	( 
	 @iMaPhong int,
	 @iGioBD time,
	 @iGioKT time
	 )
AS
	IF EXISTS (SELECT MaPhong
				FROM PhongChieu
				WHERE MaPhong = @iMaPhong)		
		BEGIN					
				DECLARE @N INT
				DECLARE @I INT
				DECLARE @FLAG INT
				SET @FLAG =1
				SET @N = (SELECT COUNT(*) FROM CaChieu)
				SET @I = 1
				WHILE(@I <= @N)
					BEGIN
						IF(EXISTS(SELECT * FROM CaChieu WHERE MaCaChieu = @I))--duyệt qua từng ca chiếu
							IF(SELECT MaPhong FROM CaChieu WHERE MaCaChieu=@I)= @iMaPhong -- nếu mã phòng này đã thêm ca chiếu rồi
								BEGIN
									DECLARE @TGBD TIME
									DECLARE @TGKT TIME
									SET @TGBD = (SELECT GioBD FROM CaChieu WHERE MaCaChieu = @I)--thời gian bắt đầu 
									SET @TGKT = (SELECT GioKT FROM CaChieu WHERE MaCaChieu = @I)--thời gian kết thúc
									--nếu giờ bắt đầu hoặc giờ kết thúc mới mà nằm trong khoảng giờ BD và giờ KT của ca chiếu đang xét
									-- thì không hợp lệ ---> hạ cờ
									-- Các điều kiện:
										--1: GBD ko được lớn hơn GKT --(@iGioBD>=@iGioKT)
										--2: GBD mới ko đươc nằm trong khoảng GBD và GKT đã tồn tại --(@TGBD<=@iGioBD and @iGioBD<=@TGKT)
										--3: GKT mới ko đươc nằm trong khoảng GBD và GKT đã tồn tại --(@TGBD<=@iGioKT and @iGioKT<=@TGKT)
										--4: GBD và GKT cũ không được nằm trong khoảng thời gian của GBD và GKT mới
									IF((@iGioBD >= @iGioKT)or
									(@TGBD<=@iGioBD and @iGioBD<=@TGKT)or
									(@TGBD<=@iGioKT and @iGioKT<=@TGKT)or
									((@iGioBD<=@TGBD) and (@TGKT<=@iGioKT)))
										SET @FLAG = 0
								END			
						SET @I = @I +1;--tăng biến đếm trong vòng lặp while
					END--kết thúc while			
				IF(@FLAG =1)
					INSERT INTO CaChieu
					VALUES (@iMaPhong,@iGioBD,@iGioKT)
				ELSE
					BEGIN
						RAISERROR('Giờ bắt đầu hoặc giờ kết thúc không hợp lệ',16,1)
					END
		END
	ELSE
		BEGIN
			RAISERROR('Mã phòng không tồn tại!',16,1)
		END
----exam:exec sp_Them_CaChieu 1,'7:00:00.0000000','12:00:00.0000000'
--@iMaPhong int,
--@iGioBD time,
--@iGioKT time
	
GO

/*----------------------------------------
			CA CHIẾU
2.Xóa
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_CaChieu
(
		@iMaCaChieu int
)
AS
	IF EXISTS (SELECT MaCaChieu FROM CaChieu WHERE MaCaChieu = @iMaCaChieu)
		if(EXISTS (SELECT MaCaChieu FROM SuatChieu where MaCaChieu = @iMaCaChieu))
			BEGIN
				RAISERROR('Mã ca chiếu đã tồn tại ở bảng Suất Chiếu, xin xóa ca chiếu này ở bảng Suất Chiếu trước, để tránh mất dữ liệu!',16,1)
			END
		else
			BEGIN
				DELETE FROM CaChieu WHERE CaChieu.MaCaChieu = @iMaCaChieu
			END
	ELSE
		BEGIN
			RAISERROR('Mã ca chiếu không tồn tại!',16,1)
		END	
	
GO

/*----------------------------------------
			CA CHIẾU
3.Cập nhật
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_CaChieu
( 
	@iMaCaChieu int,
	@iMaPhong int,
	@iGioBD time,
	@iGioKT time
)
AS
	IF EXISTS (SELECT MaPhong FROM PhongChieu WHERE MaPhong = @iMaPhong)		
		BEGIN					
				DECLARE @N INT
				DECLARE @I INT
				DECLARE @FLAG INT
				SET @FLAG =1
				SET @N = (SELECT COUNT(*) FROM CaChieu)
				SET @I = 1
				WHILE(@I<=@N)
					BEGIN
						IF(EXISTS(SELECT * FROM CaChieu WHERE MaCaChieu = @I))--duyệt qua từng ca chiếu
							IF((SELECT MaPhong FROM CaChieu WHERE MaCaChieu=@I)=@iMaPhong and @I != @iMaCaChieu )-- nếu mã phòng này đã thêm ca chiếu rồi
								BEGIN
									DECLARE @TGBD TIME
									DECLARE @TGKT TIME
									SET @TGBD = (SELECT GioBD FROM CaChieu WHERE MaCaChieu = @I)--thời gian bắt đầu 
									SET @TGKT = (SELECT GioKT FROM CaChieu WHERE MaCaChieu = @I)--thời gian kết thúc
									--nếu giờ bắt đầu hoặc giờ kết thúc mới mà nằm trong khoảng giờ BD và giờ KT của ca chiếu đang xét
									-- thì không hợp lệ ---> hạ cờ
									-- Các điều kiện:
										--1: GBD ko được lớn hơn GKT --(@iGioBD>=@iGioKT)
										--2: GBD mới ko đươc nằm trong khoảng GBD và GKT đã tồn tại --(@TGBD<=@iGioBD and @iGioBD<=@TGKT)
										--3: GKT mới ko đươc nằm trong khoảng GBD và GKT đã tồn tại --(@TGBD<=@iGioKT and @iGioKT<=@TGKT)
										--4: GBD và GKT cũ không được nằm trong khoảng thời gian của GBD và GKT mới
									IF((@iGioBD>=@iGioKT)or
									(@TGBD<=@iGioBD and @iGioBD<=@TGKT)or
									(@TGBD<=@iGioKT and @iGioKT<=@TGKT)or
									((@iGioBD<=@TGBD) and (@TGKT<=@iGioKT)))
										SET @FLAG = 0
								END			
						SET @I = @I +1;--tăng biến đếm trong vòng lặp while
					END--kết thúc while			
				IF(@FLAG =1)
					BEGIN
						UPDATE CaChieu
						SET MaPhong = @iMaPhong,
							GioBD = @iGioBD,
							GioKT = @iGioKT
						WHERE MaCaChieu = @iMaCaChieu
					END
				ELSE
					BEGIN
						RAISERROR('Giờ bắt đầu hoặc giờ kết thúc không hợp lệ',16,1)
					END
		END
	ELSE
		BEGIN
			RAISERROR('Mã phòng không tồn tại!',16,1)
		END
GO		
--exam: exec sp_CapNhat_CaChieu 1,1,'13:00:00.0000000','17:00:00.0000000'

/*----------------------------------------
			SUẤT CHIẾU
1.Thêm
*/----------------------------------------

CREATE PROCEDURE sp_Them_SuatChieu
	 
	 @iMaCaChieu int,
	 @iMaPhim int,
	 @iGioBD time,
	 @iGioKT time,
	 @dNgayChieu datetime
	 
AS
	IF EXISTS (SELECT MaCaChieu	FROM CaChieu	WHERE MaCaChieu = @iMaCaChieu)
	IF EXISTS (SELECT MaPhim FROM Phim	WHERE MaPhim = @iMaPhim)
		BEGIN
			DECLARE @N INT
			DECLARE @I INT
			DECLARE @FLAG INT
			SET @FLAG =1
			SET @N = (SELECT COUNT(*) FROM SuatChieu)
			SET @I = 1
			WHILE(@I<=@N)
				BEGIN
					IF(EXISTS(SELECT * FROM SuatChieu WHERE MaSuatChieu = @I))
						IF((SELECT MaCaChieu FROM SuatChieu WHERE MaSuatChieu = @I) = @iMaCaChieu)
							BEGIN
								DECLARE @TGBD TIME
								DECLARE @TGKT TIME
								DECLARE @TGBDCaChieu TIME
								DECLARE @TGKTCaChieu TIME
								SET @TGBD = (SELECT GioBD FROM SuatChieu WHERE MaSuatChieu = @I)--thời gian bắt đầu 
								SET @TGKT = (SELECT GioKT FROM SuatChieu WHERE MaSuatChieu = @I)--thời gian kết thúc
								SET @TGBDCaChieu = (SELECT GioBD FROM CaChieu WHERE MaCaChieu = @iMaCaChieu)
								SET @TGKTCaChieu = (SELECT GioKT FROM CaChieu WHERE MaCaChieu = @iMaCaChieu)
								IF(((@iGioBD < @TGBDCaChieu)OR(@iGioBD > @TGKTCaChieu))OR
									((@iGioKT < @TGBDCaChieu)OR(@iGioKT > @TGKTCaChieu))OR
									(@iGioBD >= @iGioKT)or
									(@TGBD <= @iGioBD and @iGioBD <= @TGKT)or
									(@TGBD <= @iGioKT and @iGioKT <= @TGKT)or
									((@iGioBD <= @TGBD) and (@TGKT <= @iGioKT)))
									SET @FLAG = 0
									
							END
				END	--KET THUC WHILE
			IF(@FLAG =1)	
				INSERT INTO SuatChieu
				VALUES (@iMaCaChieu,@iMaPhim,@iGioBD,@iGioKT,@dNgayChieu)
			ELSE
				RAISERROR('Giờ bắt đầu & giờ kết thúc không hợp lệ!',16,1)
		END
	ELSE
		BEGIN
			RAISERROR('Mã ca chiếu / mã phim không tồn tại!',16,1)
		END
GO

/*----------------------------------------
SUẤT CHIẾU
2.Xóa
*/----------------------------------------

CREATE PROCEDURE sp_Xoa_SuatChieu
(
		@iMaSuatChieu int
)
AS
	IF EXISTS (SELECT MaSuatChieu	FROM SuatChieu	WHERE MaSuatChieu = @iMaSuatChieu)
		BEGIN
			IF(EXISTS(SELECT MaSuatChieu FROM Ve WHERE MaSuatChieu = @iMaSuatChieu))
			BEGIN
				RAISERROR('Mã Suất Chiếu đã tồn tại ở bảng Vé, xin xóa Vé này ở bảng Vé trước, để tránh mất dữ liệu!',16,1)
			END
			ELSE
				DELETE FROM SuatChieu WHERE SuatChieu.MaSuatChieu = @iMaSuatChieu
		END
	ELSE
		BEGIN
			RAISERROR('Mã suất chiếu không tồn tại!',16,1)
		END	
	
GO

/*----------------------------------------
			SUẤT CHIẾU
3.Cập nhật
*/----------------------------------------

CREATE PROCEDURE sp_CapNhat_SuatChieu
(
	 @iMaSuatChieu int,
	 @iMaCaChieu int,
	 @iMaPhim int,
	 @iGioBD time,
	 @iGioKT time,
	 @dNgayChieu datetime
)	 
AS
	IF EXISTS (SELECT MaCaChieu	FROM CaChieu WHERE MaCaChieu = @iMaCaChieu)
	IF EXISTS (SELECT MaPhim FROM Phim WHERE MaPhim = @iMaPhim)
		BEGIN
			DECLARE @N INT
			DECLARE @I INT
			DECLARE @FLAG INT
			SET @FLAG =1
			SET @N = (SELECT COUNT(*) FROM SuatChieu)
			SET @I = 1
			WHILE(@I<=@N)
				BEGIN
					IF(EXISTS(SELECT * FROM SuatChieu WHERE MaSuatChieu = @I))
						IF((SELECT MaCaChieu FROM SuatChieu WHERE MaSuatChieu = @I) = @iMaCaChieu and @I!=@iMaSuatChieu)
							BEGIN
								DECLARE @TGBD TIME
								DECLARE @TGKT TIME
								DECLARE @TGBDCaChieu TIME
								DECLARE @TGKTCaChieu TIME
								SET @TGBD = (SELECT GioBD FROM SuatChieu WHERE MaSuatChieu = @I)--thời gian bắt đầu 
								SET @TGKT = (SELECT GioKT FROM SuatChieu WHERE MaSuatChieu = @I)--thời gian kết thúc
								SET @TGBDCaChieu = (SELECT GioBD FROM CaChieu WHERE MaCaChieu = @iMaCaChieu)
								SET @TGKTCaChieu = (SELECT GioKT FROM CaChieu WHERE MaCaChieu = @iMaCaChieu)
								IF(((@iGioBD<@TGBDCaChieu)OR(@iGioBD>@TGKTCaChieu))OR
									((@iGioKT<@TGBDCaChieu)OR(@iGioKT>@TGKTCaChieu))OR
									(@iGioBD>=@iGioKT)or
									(@TGBD<=@iGioBD and @iGioBD<=@TGKT)or
									(@TGBD<=@iGioKT and @iGioKT<=@TGKT)or
									((@iGioBD<=@TGBD) and (@TGKT<=@iGioKT)))
									SET @FLAG = 0
									
							END
				END	--KET THUC WHILE
			IF(@FLAG =1)	
				UPDATE SuatChieu
						SET 
							MaCaChieu = @iMaCaChieu,
							MaPhim = @iMaPhim,
							GioBD = @iGioBD,
							GioKT = @iGioKT,
							NgayChieu = @dNgayChieu
						WHERE MaSuatChieu = @iMaSuatChieu
			ELSE
				RAISERROR('Giờ bắt đầu & giờ kết thúc không hợp lệ!',16,1)
		END
	ELSE
		BEGIN
			RAISERROR('Mã ca chiếu / mã phim không tồn tại!',16,1)
		END
GO		



/*----------------------------------------
			Tìm Kiếm
Theo các tiêu chí khác nhau:
	1. Tìm phim theo rạp
	2. Tìm ngày chiếu theo rạp và phim
	3. Tìm giờ chiếu theo  rạp , phim,ngày chiếu
*/----------------------------------------

CREATE PROCEDURE sp_Search_Phim

	@iMaRap int
AS
	SELECT distinct p.MaPhim
      ,[TenPhim]
      ,[NamSX]
      ,[NuocSX]
      ,[HangPhim]      
      ,[Trailer]
      ,[Poster]
      ,[ThoiLuongPhim]
      ,[MaDDPhim] 
  FROM Phim p, Rap r, PhongChieu pc, CaChieu c, SuatChieu s
  where pc.MaRap = r.MaRap and c.MaPhong = pc.MaPhong and s.MaCaChieu = c.MaCaChieu and s.MaPhim = p.MaPhim 
  and r.MaRap = @iMaRap
--exam: exec sp_Search_Phim 1
-------------------------------------------
go
CREATE PROCEDURE sp_Search_NgayChieu

	@iMaRap int,
	@iMaPhim int
AS
	SELECT s.NgayChieu
  FROM Phim p, Rap r, PhongChieu pc, CaChieu c, SuatChieu s
  where pc.MaRap = r.MaRap and c.MaPhong = pc.MaPhong and s.MaCaChieu = c.MaCaChieu and s.MaPhim = p.MaPhim 
  and r.MaRap = @iMaRap and p.MaPhim = @iMaPhim
  
--exam: exec sp_Search_NgayChieu 1,2
---------------------------------------------------
go
CREATE PROCEDURE sp_Search_LichChieu

	@iMaRap int,
	@iMaPhim int,
	@dNgayChieu date
AS
	SELECT s.GioBD
  FROM Phim p, Rap r, PhongChieu pc, CaChieu c, SuatChieu s
  where pc.MaRap = r.MaRap and c.MaPhong = pc.MaPhong and s.MaCaChieu = c.MaCaChieu and s.MaPhim = p.MaPhim 
  and r.MaRap = @iMaRap and p.MaPhim = @iMaPhim and s.NgayChieu = @dNgayChieu

--exam: exec sp_Search_LichChieu 1,2,'2013-04-30'


GO



/*-----------------------------------------------

HIỂN THỊ DANH SÁCH TRA CỨU - NGHIỆP VỤ TRA CỨU THÔNG TIN

1. danh sách nhân viên theo chức vụ
*/----------------------------------------------
CREATE PROCEDURE sp_DSNhanVien_TheoCV
(
	@sChucVu int = NULL
)
AS
BEGIN
	--lệnh bỏ đếm từng dòng lệnh
	SET NOCOUNT ON
	IF @sChucVu IS NULL 
		-- khi không có mã số nhập vào
		SELECT NhanVien.*, ChucVu.TenChucVu
		FROM NhanVien INNER JOIN ChucVu ON NhanVien.MaCV = ChucVu.MaCV
		ORDER BY NhanVien.MaNhanVien
	ELSE
		--khi có mã nhân viên
		SELECT NhanVien.*, ChucVu.TenChucVu
		FROM NhanVien INNER JOIN ChucVu ON NhanVien.MaCV = ChucVu.MaCV
		WHERE NhanVien.MaNhanVien = @sChucVu
		ORDER BY NhanVien.MaNhanVien
END
GO


/*----------------------------------------
2. Phim - theo ca chiếu
*/----------------------------------------

CREATE PROCEDURE sp_DSPhim_CaChieu
(
	@dGioBD time = NULL,
	@dGioKT time = NULL
	
)
AS
BEGIN
	--lệnh bỏ đếm từng dòng lệnh
	SET NOCOUNT ON
	IF @dGioBD IS NULL and @dGioKT IS NULL
		-- khi không có giờ nhập vào
		SELECT p.*, c.GioBD,c.GioKT
		FROM SuatChieu sc INNER JOIN Phim p ON p.MaPhim = sc.MaPhim
			JOIN CaChieu c ON sc.MaCaChieu = c.MaCaChieu
		ORDER BY p.MaPhim
	ELSE
		--khi có giờ
		SELECT p.*, c.GioBD,c.GioKT
		FROM SuatChieu sc INNER JOIN Phim p ON p.MaPhim = sc.MaPhim
			JOIN CaChieu c ON sc.MaCaChieu = c.MaCaChieu
		WHERE sc.GioBD = @dGioBD and sc.GioKT = @dGioKT
		ORDER BY p.MaPhim
END
GO

/*----------------------------------------
3. Phim - theo suất chiếu
*/----------------------------------------

CREATE PROCEDURE sp_DSPhim_TheoSuatChieu_Gio
(
	@dGioBD time = NULL,
	@dGioKT time = NULL
)
AS
BEGIN

	--lệnh bỏ đếm từng dòng lệnh
	SET NOCOUNT ON
	IF @dGioBD IS NULL and @dGioKT IS NULL
		-- khi không có giờ nhập vào
		SELECT p.*, sc.GioBD,sc.GioKT
		FROM SuatChieu sc INNER JOIN Phim p ON p.MaPhim = sc.MaPhim
		ORDER BY p.MaPhim
	ELSE
		--khi có giờ
		SELECT p.*, sc.GioBD,sc.GioKT
		FROM SuatChieu sc INNER JOIN Phim p ON p.MaPhim = sc.MaPhim
		WHERE sc.GioBD = @dGioBD and sc.GioKT = @dGioKT
		ORDER BY p.MaPhim
END
GO  

/*----------------------------------------
4. Phim - theo định dạng phim
*/----------------------------------------

CREATE PROCEDURE sp_DSPhim_TheoDinhDang
(
	@sTenDD nvarchar(20) = NULL
)

AS
BEGIN
	--lệnh bỏ đếm từng dòng lệnh
	SET NOCOUNT ON
	IF @sTenDD IS NULL 
		-- khi không có mã số nhập vào
		SELECT p.*, d.TenDinhDang
		FROM Phim p, DinhDang d
		WHERE p.MaDDPhim = d.MaDDPhim
		ORDER BY p.MaPhim
	ELSE
		--khi có mã nhân viên
		SELECT p.*,d.TenDinhDang
		FROM Phim p, DinhDang d
		WHERE p.MaDDPhim = d.MaDDPhim and d.TenDinhDang = @sTenDD
		ORDER BY p.MaPhim
END
GO


/*----------------------------------------
5. Phim - theo hãng phim
*/----------------------------------------


CREATE PROCEDURE sp_DSPhim_HangPhim
(
	@sHangPhim nvarchar(50) = NULL
)
AS
BEGIN
	--lệnh bỏ đếm từng dòng lệnh
	SET NOCOUNT ON
	IF @sHangPhim IS NULL 
		-- khi không có mã số nhập vào
		SELECT p.*
		FROM Phim p
		ORDER BY p.MaPhim
	ELSE
		--khi có hãng phim
		SELECT p.*
		FROM Phim p
		WHERE p.HangPhim = @sHangPhim
		ORDER BY p.MaPhim
END
GO

/*----------------------------------------
6. Phim - theo ngày chiếu
*/----------------------------------------

CREATE PROCEDURE sp_DSPhim_TheoNgayChieu
(
	@dNgayChieu datetime = NULL
)
AS
BEGIN
	--lệnh bỏ đếm từng dòng lệnh
	SET NOCOUNT ON
	IF @dNgayChieu IS NULL 
		-- khi không có ngày chiếu nhập vào
		SELECT p.*, sc.NgayChieu
		FROM SuatChieu sc INNER JOIN Phim p ON p.MaPhim = sc.MaPhim
		ORDER BY p.MaPhim
	ELSE
		--khi có ngày chiếu
		SELECT p.*, sc.NgayChieu
		FROM SuatChieu sc INNER JOIN Phim p ON p.MaPhim = sc.MaPhim
		WHERE sc.NgayChieu = @dNgayChieu
		ORDER BY p.MaPhim
END
GO

/*----------------------------------------
7. Phim - theo thể loại phim
*/----------------------------------------

CREATE PROCEDURE sp_DSPhim_TheoTheLoai
(
	@sTenTheLoai nvarchar(50) = NULL
)
AS
BEGIN
	--lệnh bỏ đếm từng dòng lệnh
	SET NOCOUNT ON
	IF @sTenTheLoai IS NULL 
		-- khi không có tên thể loại nhập vào
		SELECT p.*, tlp.TenTheLoai
		FROM ChiTietLoaiPhim ctp INNER JOIN Phim p ON p.MaPhim = ctp.MaPhim
			JOIN TheLoaiPhim tlp ON tlp.MaTheLoai = ctp.MaTheLoai
		ORDER BY p.MaPhim
	ELSE
		--khi có tên thể loại
		SELECT p.*, tlp.TenTheLoai
		FROM ChiTietLoaiPhim ctp INNER JOIN Phim p ON p.MaPhim = ctp.MaPhim
			JOIN TheLoaiPhim tlp ON tlp.MaTheLoai = ctp.MaTheLoai
		WHERE tlp.TenTheLoai = @sTenTheLoai
		ORDER BY p.MaPhim
END
GO


/*----------------------------------------
8. Thành viên - theo đối tượng
*/----------------------------------------

CREATE PROCEDURE sp_DSThanhVien_TheoDoiTuong
(
	@sTenDoiTuong nvarchar(50) = NULL
)
AS
BEGIN
		--lệnh bỏ đếm từng dòng lệnh
	SET NOCOUNT ON
	IF @sTenDoiTuong IS NULL 
		-- khi không có điều kiện kỹ thuật nhập vào
		SELECT tv.*,dt.TenDoiTuong
		FROM ThanhVien tv, DoiTuong dt
		WHERE tv.MaDoiTuong = dt.MaDoiTuong
		ORDER BY tv.MaTV
	ELSE
		--khi có mã nhân viên
		SELECT tv.*,dt.TenDoiTuong
		FROM ThanhVien tv, DoiTuong dt
		WHERE tv.MaDoiTuong = dt.MaDoiTuong and dt.TenDoiTuong = @sTenDoiTuong
		ORDER BY tv.MaTV	
END
GO
